<?php

class Validator
{
	var $name;
	var $message;
	var $error_message = "Неправильно заданы данные";
	var $isValidator = true;
	var $isUpdate;
	
	function Validator($name, $error_message = "")
	{
		$this->name = $name;
		if ($error_message != "") $this->error_message = $error_message;
	}
	
	function Validate()
	{
		if ($this->Check()) 
		{
		    return true;
		}
		else 
		{
			$this->message = $this->error_message;
			return false;
		}
	}
}


class ValidatorNotEmpty extends Validator
{
	var $error_message="Поле обязательно для заполнения";
	
	function Check()
	{
		if( trim($_REQUEST[$this->name]) ) return true;
		return false;
	}
}

class ValidatorLatin extends Validator
{
	var $error_message="Допустимы только латинские буквы, цифры и знаки \"-\" и \"_\"";
	
	function Check()
	{
		if(!$_REQUEST[$this->name]) return true;
		$re = "/^[a-zA-Z0-9\-_]+$/";
		if(preg_match($re, $_REQUEST[$this->name] )) return true;
		return false;
	}
}

class ValidatorEmail extends Validator
{
	var $error_message="Неправильно задан адрес email";
	
	function Check()
	{
		if(!$_REQUEST[$this->name]) return true;
		//$re = "^[a-z0-9]+(\.[_a-z0-9]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,10})$";
		$re = "^[a-z0-9][_a-z0-9\-]*(\.[_a-z0-9\-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,10})$";
		if(preg_match($re, strtolower($_REQUEST[$this->name]) )) return true;
		return false;
	}
}

class ValidatorNumber extends Validator
{
	var $error_message="Введите в это поле число";
	
	function Check()
	{
		if(is_numeric($_REQUEST[$this->name]) ) return true;
		return false;
	}
}


class ValidatorPicture extends Validator
{
	var $error_message="Укажите файл с картинкой";
	
	function Check()
	{
		if($this->isUpdate) return true;
		if( is_uploaded_file($_FILES[$this->name]['tmp_name']) ) 
		{
			$path_parts = pathinfo($_FILES[$this->name]['name']);
			if(strtolower($path_parts["extension"])=="jpg" || strtolower($path_parts["extension"])=="jpeg")	
			return true;
		}
		return false;
	}
}


class ValidatorDate extends Validator
{
	var $error_message="Неправильный формат даты";
	
	function Check()
	{
		$day = $_REQUEST[$this->name."_day"];
		$month = $_REQUEST[$this->name."_month"];
		$year = $_REQUEST[$this->name."_year"];
		
		$this->error_message="Неправильный задана дата: $day.$month.$year";
		
		if(!$day || !$month || !$year) return false;
		if(!is_numeric($day) || !is_numeric($month) || !is_numeric($year)) return false;
		
		if($year<1) return false;
		if($month<1 || $month>12) return false;
		if($day<1 || $day>31) return false;
		
		return true;
	}
}
